﻿/************************************************
 * TruthTable.cs
 * 
 * Klasi sem heldur utam um tilvik af 
 * röð í sanntöflu og getur framkvæmt aðgerðir a henni
 * 
 * **********************************************/

using System;
using System.Collections.Generic;
using System.Text;

namespace calculator
{
    public class TruthTableRow
    {
        private string name;
        private int id;
        private bool[] row;
     
        public TruthTableRow(int columnSize )
        {
            createRow(columnSize);
            name = "";
            id = -1;
        }
        public TruthTableRow(int columnSize, string name)
        {
            createRow(columnSize);
            this.name = name;
            id = -1;
        }
        public TruthTableRow(int columnSize, string name, int id)
        {
            createRow(columnSize);
            this.name = name;
            this.id = id;
        }
        //Fall sem sér um að athuga hvort að columnSize er ólögleg tala, annars býr hann til röðina
        private void createRow(int columnSize)
        {
            try
            {
                row = new bool[columnSize];
            }
            catch (System.OverflowException ex)
            {
                throw ex;
            };
        }

        public bool[] getRow()
        {
            return row;
        }
        //Fall sem skilar value á ákveðnum stað í fylki, hendir villu ef stakið er ekki til
        public bool getValue(int location)
        {
            try
            {
                return row[location];
            }
            catch (System.IndexOutOfRangeException ex)
            {
                throw ex;
            }
        }
        //Fall sem setur value á ákveðin stað í flyki, hendir villu ef stakið er ekki til
        public void setValue(int location, bool value)
        {
            try
            {
                row[location] = value;
            }
            catch (System.IndexOutOfRangeException ex)
            {
                throw ex;
            }
        }
        public string getName()
        {
            return name;
        }
        public int getId()
        {
            return id;
        }
        public void setRow(bool[] row)
        {
            this.row = row;
        }
        public void setName(string name)
        {
            this.name = name;
        }
        public void setId(int id)
        {
            this.id = id;
        }

        //Fall sem overridear == virkjan til að athuga hvort 2 raðir eru þær sömu
        public static bool operator ==(TruthTableRow a, TruthTableRow b)
        {
            if(a.row.Length != b.row.Length)
                return false;
            if (a.getId() != b.getId())
                return false;
            if (a.row != b.row)
            for (int i = 0; i < a.row.Length; i++)
            {
                if (a.row[i] != b.row[i])
                    return false;
            }
            return true;
        }
        public static bool operator !=(TruthTableRow a, TruthTableRow b)
        {
            return !(a == b);
        }
       
    }
}
